High-performance computing is prevalent nowadays, being utilized in a wide variety of applications such as data processing, image processing, multimedia encoding and decoding, and data communication. In order to accomplish the desired goals, there must be sufficient computing power. In addition to computing power, flexibility is also important for adapting to ever-changing business and technical situations. While software continues to evolve and become more capable, there are still particular time-sensitive tasks that cannot be practically performed in software within their application time constraints. As such, these tasks require hardware to be employed.
Additionally, other factors such as price and supply chain become important in many applications. In general, development using reconfigurable hardware can be considerably more cost effective than development of a dedicated Application Specific Integrated Circuit (ASIC). Another benefit of reconfigurable hardware pertains to supply chains. A product that requires multiple integrated circuits may be able to use multiple instances of the same reconfigurable hardware, rather than several different ASICs from different manufacturers. Thus, in some instances, a Bill of Materials (BOM) for a product can be simplified by using reconfigurable hardware.
In some architectures, multiple cores can work together to perform a particular task. In these cases, the cores communicate with each other, exchange data, and combine data to produce intermediate and/or final outputs. Each core can have a variety of registers to support program execution and storage of intermediate data. Additionally, registers such as stack pointers, return addresses, and exception data can also be present to enable execution of complex routines and to support debugging of computer programs running on the multiple cores. Furthermore, arithmetic units can provide mathematical functionality, such as addition, subtraction, multiplication, and division.
Another advantage of reconfigurable hardware is that in many processing applications, reconfigurable devices have proven extremely efficient for certain types of processing tasks. The main reason why cost and performance advantages of reconfigurable devices exist in certain circumstances is that reconfigurable logic enables program parallelism, allowing multiple simultaneous computation operations to occur for the same program. Meanwhile, conventional processors are often limited by instruction bandwidth and execution restrictions. Often, the high-density properties of reconfigurable devices come at the expense of the high-diversity property that is inherent in microprocessors. Microprocessors have evolved to a highly-optimized configuration that can provide cost/performance advantages over reconfigurable arrays for certain tasks with high functional diversity. However, there are many tasks for which a conventional microprocessor may not be the best design choice. Other conventional computing techniques involve the use of application specific integrated circuits (ASICs) that are designed from the ground up with a specific application or implementation in mind. These ASICs can accomplish high performance tasks, but at the cost of extremely inflexible hardware design.
The emergence of reconfigurable computing has created a capability for both flexibility and performance of computer systems. Reconfigurable computing combines the high speed of application-specific integrated circuits with the flexibility of programmable processors. Reconfigurable computing thus provides much-needed functionality, speed, performance, flexibility, ease of implementation, and power consumption, to name just a few benefits, to enable the technology in many current and upcoming fields to operate in a cost-effective, flexible, and extendable manner of operation.